1
การทบทวนพื้นฐาน: เป้าหมายและเครื่องมือ
AI013Lesson 1
00:00

การทบทวนพื้นฐานในภาษา C++ ต้องเปลี่ยนจากพฤติกรรมแบบอนุญาตและดั้งเดิมของสไตล์ภาษา C ไปสู่ ความปลอดภัยด้านชนิดข้อมูลอย่างเข้มงวด ซึ่งถูกบังคับโดยเครื่องมือสมัยใหม่ การเปลี่ยนแปลงนี้เน้นการแทนที่พฤติกรรมที่ไม่ชัดเจนด้วยเจตนารมณ์ที่ชัดเจน

1. ความเปราะบางของข้อความคงที่ (String Literal)

ในเครื่องมือสมัยใหม่ char *str = "hello world!"; ถือเป็นช่องโหว่สำคัญ ตั้งแต่มาตรฐาน C++11 เป็นต้นไป ข้อความคงที่จะถูกจัดการเป็น const char[]. การละเลย const ถือเป็นการแปลงที่ถูกยกเลิกแล้ว ซึ่งทำลายความมั่นคงของไบนารี และกระตุ้นให้เกิดการแจ้งเตือนจากคอมไพเลอร์

2. ความล้มเหลวของการแปลงแบบสไตล์ภาษา C

การแปลงแบบทั่วไป (Type)value คือ "เครื่องมือที่หยาบ" ที่ดำเนินงานของทุกประเภทการแปลงแบบภาษา C++ พร้อมกัน โดยไม่เลือกปฏิบัติ ซ่อนข้อผิดพลาดทางตรรกะ ที่อาจถูกใช้ประโยชน์โดยกระบวนการปรับแต่งสมัยใหม่ จนนำไปสู่การล่มของโปรแกรมขณะทำงาน

3. หลักสี่ประการของการแปลงในยุคสมัยใหม่

ดั้งเดิม (ไม่ปลอดภัย)
char *s = "hi";
int x = (int)3.5;
สมัยใหม่ (ปลอดภัย)
const char *s = "hi";
int x = static_cast<int>(3.5);

การทบทวนต้องจัดหมวดหมู่เจตนารมณ์:

  • static_cast: การแปลงที่ชัดเจน (การลดขนาดตัวเลข หรือการเคลื่อนที่ในโครงสร้างเชิงลำดับ)
  • reinterpret_cast: การตีความรูปแบบบิตระดับต่ำ (การจับคู่ฮาร์ดแวร์/บัฟเฟอร์)
  • const_cast: การลบคุณสมบัติ const/volatile อย่างแม่นยำ เพื่อเชื่อมต่อกับไลบรารีดั้งเดิม

$$\text{ความเข้มงวดสมัยใหม่} = \text{เจตนารมณ์ที่ชัดเจน} + \text{การแจ้งเตือนจากคอมไพเลอร์}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>